package com.lanou3g.code0423.set;

/**
 * Created by dllo on 18/4/23.
 */


public class Person {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

//    @Override
//    public boolean equals(Object obj) {
//
//        if (obj == null ){
//            return false;
//        }
//
//        if (!(obj instanceof Person)){
//
//            //instanceof 关键字:
//            //用来判断 左边的对象是否是右边类型 或者右边类型的子类 或者实现了右边类型接口
//            //如果是,则返回true,不是返回false
//
//            return false;
//
//        }//之前的代码都是套路,永远这个写
//        //以下个各类的写法不同,根据自己的代码进行判断
//
//        Person other = (Person)obj;
//        return this.name.equals(other.getName()) && this.age == other.getAge();
//
//    }
//
//    @Override
//    public int hashCode() {   //一般与equals方法同时覆写
//
//       // return name.hashCode() *age;  //随意写
//        return super.hashCode(); //hashCode默认与地址空间有关,与equals共同判断是否相等
//
//    }

    //以后统一使用idea:command+n
    //选择equal() & hashCode()
    //把要判断相等属性勾选上,然后点确定即可,不需要自己手写
    //不需要自己手写


    //返回值的规则,行业标准,体现equals()里使用的属性即可,怎么算随便

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Person person = (Person) o;

        if (age != person.age) return false;
        return name.equals(person.name);

    }

    @Override
    public int hashCode() {
        int result = name.hashCode();
        result = 31 * result + age;
        return result;
    }
}
